package org.db.ui;

import java.util.List;

import javax.swing.JTable;

import org.db.Manager;
import org.db.dao.BauwerkslinienDAO;

public class BauwerkslinienTable extends JTable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 8458823455416269835L;

	private ColorTableCellRenderer renderer;

	public BauwerkslinienTable() {
		setModel(new BauwerkslinienTableModel());
		registerCellRenderer();
		// Tabelle initial mit bisherigen BauwerkslinienElementen füllen
		((BauwerkslinienTableModel) getModel())
				.addBauwerkslinienElemente(Manager.getInstance()
						.getBauwerkslinienElemente());
	}

	public void addBauwerkslinienElement(BauwerkslinienDAO dao) {
		((BauwerkslinienTableModel) getModel()).addBauwerkslinienElement(dao);
	}

	public List<BauwerkslinienDAO> getBauwerkslinienElemente() {
		return ((BauwerkslinienTableModel) getModel())
				.getBauwerksLinienElemente();
	}

	public void replaceBauwerkslinienElement(BauwerkslinienDAO oldDao,
			BauwerkslinienDAO newDao) {
		((BauwerkslinienTableModel) getModel()).replaceBauwerkslinienElement(
				oldDao, newDao);
	}

	public BauwerkslinienDAO getElementAtRow(int row) {
		return ((BauwerkslinienTableModel) getModel()).getElementAtRow(row);
	}

	public void refresh() {
		((BauwerkslinienTableModel) getModel()).fireTableDataChanged();
	}

	public void removeBauwerkslinienElement(BauwerkslinienDAO dao) {
		((BauwerkslinienTableModel) getModel())
				.removeBauwerkslinienElement(dao);
	}

	public BauwerkslinienDAO removeBauwerkslinienElement(int rowIndex) {
		return ((BauwerkslinienTableModel) getModel())
				.removeBauwerkslinienElement(rowIndex);
	}

	public boolean isEmpty() {
		return ((GleisDefinitionTableModel) getModel()).isEmpty();
	}

	public void highlightCell(int row, int column) {
		renderer.highlightCell(row, column);
		refresh();
	}

	/**
	 * Highlighting der Zellen aufheben.
	 */
	public void resetHighlighting() {
		renderer.reset();
		refresh();
	}

	private void registerCellRenderer() {
		renderer = new ColorTableCellRenderer();
		for (int i = 0; i < getColumnModel().getColumnCount(); i++) {
			getColumnModel().getColumn(i).setCellRenderer(renderer);
		}
	}

}
